package com.zlzxm.studentscreen.net.websocket;

/**
 * CREATE BY zlzxm ON 12/10/20
 */
public class ErrorCode {

    public static final int ErrorCode = -1;

    public static final int CLOSE_NORMAL = 1000; //正常关闭; 无论为何目的而创建, 该链接都已成功完成任务。

    public static final int CLOSE_GOING_AWAY = 1001; //终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开。

    public static final int CLOSE_PROTOCOL_ERROR = 1002; //由于协议错误而中断连接。

    public static final int CLOSE_UNSUPPORTED = 1003; //由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据)。

    public static final int CLOSE_NO_STATUS = 1005; //保留。 表示没有收到预期的状态码。

    public static final int CLOSE_ABNORMAL = 1006; //保留。 用于期望收到状态码时连接非正常关闭 (也就是说, 没有发送关闭帧)。

    public static final int Unsupported_Data = 1007; //由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据)。

    public static final int Policy_Violation = 1008; //由于收到不符合约定的数据而断开连接。 这是一个通用状态码, 用于不适合使用 1003 和 1009 状态码的场景。

    public static final int CLOSE_TOO_LARGE = 1009; //由于收到过大的数据帧而断开连接。

    public static final int Missing_Extension = 1010; //客户端期望服务器商定一个或多个拓展, 但服务器没有处理, 因此客户端断开连接。

    public static final int Internal_Error = 1011; //客户端由于遇到没有预料的情况阻止其完成请求, 因此服务端断开连接

    public static final int Service_Restart = 1012; //服务器由于重启而断开连接。 [Ref]

    public static final int Try_Again_Later = 1013; //服务器由于临时原因断开连接, 如服务器过载因此断开一部分客户端连接。 [Ref]




    public static final  String REASON_UNKNOWN_SCHEME = "unknown scheme: null"; //未知协议

    public static final  String REASON_FAILED_TO_CONNECT = "failed to connect"; //连接失败

    private static final String HEAD = "考场连接错误:  ";

    private static final String CODE = " code: ";


    private static final String TIP_UNKNOWN = "未知错误";

    private static final String TIP_CLOSE_NORMAL = "与考场的连接断开";

    private static final String TIP_UNKNOWN_SCHEME = "未知协议";

    private static final String TIP_FAILED_TO_CONNECT = "连接服务器失败";

    private static final String TIP_CLOSE_ABNORMAL = "连接意外断开,请检查网络状态";



    public static String  convertError(int error,String reason) {

        String result = HEAD + TIP_UNKNOWN;

        if (error == ErrorCode) {

            if (reason.equals(REASON_UNKNOWN_SCHEME)) {

                result =  HEAD + TIP_UNKNOWN_SCHEME;

            } else if (reason.contains(REASON_FAILED_TO_CONNECT)) {

                result =  HEAD + TIP_FAILED_TO_CONNECT;

            }


        }else if(error == CLOSE_NORMAL){

            result = TIP_CLOSE_NORMAL;
        }else if(error == CLOSE_ABNORMAL){

            result = HEAD +TIP_CLOSE_ABNORMAL;
        }

        return result + CODE + error;
    }

}
